JAWS DAYS 2016 - HackDay / SORACOM Air+AWS IoTでデータ可視化 〜OpenBlocks IoTハンズオン初級編〜¶
本ドキュメントは2016/3/12(sat)に開催された JAWS DAYS 2016 内のハンズオントラック “HackDay” 用のテキストです
Auhtor: Kohei MATSUSHITA
概要¶
OpenBlocks IoT BX1 (以下 BX1) を使用し、富士通コンポーネント社製 温度・加速度センサーデバイス “FWM8BLZ02” のデータを “SORACOM Air” の回線で “AWS IoT” に送信し、Amazon Elasticsearch Service(以下 Amazon ES)上のKibanaでグラフ化するところまでを解説します
全体構成¶
OpenBlocks IoT BX1 (以下 BX1) を使用し、富士通コンポーネント社製 温度・加速度センサーデバイス “FWM8BLZ02” のデータを “SORACOM Air” の回線で “AWS IoT” に送信し、”Amazon Elasticsearch Service” (以下 Amazon ES)上のKibanaでグラフ化するところまでを解説します
全体構成図と流れは以下のようになります

ハンズオンの前に¶
対象者(前提条件・スキル等)¶
- AWS Management Consoleの基本的な操作がわかる
- シリアルコンソールとターミナル等による機器操作スキル (FTDIシリアルドライバのインストール等含む)
- AWS IoTの概要を理解している(AWS IoT ハンズオン ~基本編~」を参考にしますと、より実践的な内容を理解することが出来ます。)
AWSのアカウントをお持ちでない方は¶
Amazon Web Servicesをご利用いただくために、事前のアカウント取得をお願いいたします。
アカウントの取得はこちら http://aws.amazon.com/jp/register-flow/
アカウント取得はクレジットカードの番号入力が必要となります。 アカウントを取得しただけでは料金はかかりません。
部材等の確認¶
準備するものをご確認ください (不足している場合はチューターにお声がけください)
- 支給されるもの
- 持ち帰りOK
- SORACOM Air <miniSIMサイズ> x 1枚
- 貸し出し物 (返却いただきます)
- OpenBlocks IoT BX1 x 1ケ
- BX1用 電源兼シリアルコンソール USBケーブル x 1本
- センサーデバイス FWM8BLZ02 (電池入り) x 1ケ
- 持ち帰りOK
- 用意いただくもの
- ノートPC
- Wi-Fi接続可
- USBポート使用可 (Aタイプ1ポート以上)
- FTDIシリアルドライバーインストール済
- シリアルコンソール制御用ターミナルソフトインストール済 (e.g. TeraTerm, GNU screen)
- curlやwgetなどHTTPコールが可能なツール
- 参加者個人のAWSアカウント
- 有効なクレジットカード (SORACOM Airのアクティベーションに使用)
- ノートPC
注釈
curl等のツール類はBX1の中に入っていますので、それを利用することも可能です(ただしBX1から利用する場合は3G回線費用が別途かかる可能性が有ります。その他、EC2インスタンスを用意して、そちらで実施することも可能です
注意事項¶
- 章毎に達成状況を確認しながら進めていきますが、時間の都合上未達者がいても次に進む場合がありますのでご了承ください
- AWSやSORACOM等、ハンズオンで発生する費用については参加者の自己負担となります
- 不明な点はお気軽にチューターへご相談ください
BX1のWi-Fi AP設定とSORACOM Air(3Gネットワーク)設定¶
本章のゴール: pingをWebUI上から行い、3G回線がつながっていることを確認する
作業の位置づけ;

BX1の取り扱い (電源ON/OFF・再起動、SIM挿入)¶
BX1は給電開始と共に電源ONとなります。USBケーブルを接続すると起動開始です
注釈
- INITボタンや電源ボタンはOSのシャットダウンと再起動に利用されますので、必要時以外は押さないでください
- SIMは電源ON前に挿すようにしてください。起動後に挿しても認識しません
部位の名前やSIM挿入方法については、下記を参照してください

ステータスインジケータ (LEDの表示色)¶
BX1は STATUS のLEDにて状態を把握することができます
本ハンズオンにおいては、起動後は 白色、水色、青色 が望ましく、それ以外の色の場合は不具合がある可能性がありますので、チューターにご相談ください
具体的なLED色と状態については、下記を参照してください

Web管理画面(WebUI)へのログイン¶
警告
- BX1に接続したPCやスマートフォンは、BX1のWi-Fiに接続している限り、後ほど設定するSORACOM Airの設定が終わるまではインターネットに接続することが出来ません
- また、SORACOM Airの設定が完了すると、インターネットへのアクセスは “PC =[Wi-Fi]=> BX1 =[SORACOM Air]=> インターネット” という経路になり、 通信料が発生する可能性があります ので、Dropbox等の共有ソフトの動作をOFFにすることを 強く推奨いたします
使用許諾の確認と管理ユーザアカウントの設定¶
使用許諾の “同意する” ボタンを押すと、WebUI管理用アカウントの作成を求められます
下記にて設定願います (本来は複雑な組み合わせが好ましいのですが、ハンズオン時のトラブルシュート対策です)
ID | iotadmin |
Password | 0BSI0T (ゼロ ビー エス アイ ゼロ ティー) |
成功すると、ネットワーク設定画面が表示されます

Wi-Fi AP設定とSORACOM Air(3Gネットワーク)設定¶
ネットワーク設定画面を開きます
(前項から正しく遷移していれば表示されているはずですが、そうでない場合は [ネットワーク] - [基本] を選択するようにしてください)
ネットワーク設定画面では各項目をそれぞれ下記のとおり設定してください
ホスト名 | <シリアル番号> (例 F2A00788) |
ドメイン | openblocks.local |
Wi-Fi / SSID | iotfamily_<シリアル番号> (例: iotfamily_F2A00788) |
Wi-Fi / チャンネル | <シリアル番号 最後の値> (例:F2A00788なら “8”) (0の方は10 / A~Eの方は 11) |
Wi-Fi / パスワード | openblocks |
モバイル回線 / APN | soracom.io |
モバイル回線 / ユーザ名 | sora |
モバイル回線 / パスワード | sora |
注釈
- Wi-Fiのチャンネル設定は 詳細を表示する をチェックすることで表示されます
- モバイル回線の設定は サービスネットワーク(モバイル回線) を 使用する にチェックすることで表示されます
再起動¶
APNの設定は再起動で反映されるため、BX1を再起動します
- WebUIから [メンテナンス] - [停止・再起動] を表示
- 再起動を実施します (最後にに確認ダイアログがでるので見逃さないようにしてください)
注釈
再起動は5分程度かかります

pingで確認¶
再起動が無事終了すればBX1は3Gネットワークに接続された状態となっています
WebUI上からpingを発信して確認してみます
- WebUIにログインした後 [ネットワーク] - [通信確認]
- 宛先ホスト:
metadata.soracom.io

ここまで到達できればゴールです
センサーとBX1の接続 へ進む
センサーとBX1の接続¶
本章のゴール: センサーデバイス FWM8BLZ02(以下、センサー)の温度データをBX1で受信し、WebUI上でグラフ化される
作業の位置づけ;

センサーをBX1に登録する¶
センサーを検出して登録する¶
- WebUIから [サービス] - [Bluetooth関連] を表示
- Bluetooth LEデバイス検出 の [検出] をクリック
- 一覧の中から自分のデバイスを探し 使用設定 にチェックをして [保存]
注釈
- Bluetooth デバイス検出の方でなく Bluetooth LEデバイス検出 を押すようにしてください

自分のデバイスの探し方¶
Device Name = FWM8BLZ02 が大量に表示される可能性があります
お配りしたセンサーにはアドレスのタグが書かれており、画面上に表示されている Device Address (= MAC Address) と一致したものが、ご自分のセンサーとなりますので確認してください

BX1のデータ収集設定¶
BX1のデータ収集機能を開始する¶
- WebUIから [サービス] - [基本] を表示
- データ収集 における データ収集 ならびに PD Handler をそれぞれ 使用する にして [保存]
注釈
- “PD Handler” は “データ収集” を <使用する> にすると表示されます

注釈
- データ収集を開始すると、新たにセンサーを登録をすることができなくなります
- デバイス登録をする場合は、まず、データ収集を行わないように設定を変更してください。センサー登録を行いたい場合は、データ収集を停止することで登録が可能となります
BX1内へのデータ収集機能を開始する¶
- WebUIから [サービス] - [収集設定] を表示
- 本体内(local) を 使用する

ページ後半に移動し dev_le_0000001 の設定を下記のようにします
送信対象 | 送信する |
取得時間間隔(ms) | 1000 |
送信先設定 | localのみにチェック |
以上を確認し [保存]

トラブルシュート¶
データ収集状況ログの確認¶
WebUIから [サービス] - [収集ログ] にて、動作確認が可能です
ログ選択はそれぞれ下記のとおりです
pd-handler-stdout.log | センサー <-> BX1 間の送受信状況 |
pd-emitter.log | BX1 <-> 送信先(localやAWS IoT等) 間の送受信状況 |
下記画面はセンサーからのデータ読み出しが成功している場合のログ画面です。JSONが表示されているのが見てわかります

pd-handler-stdout.log に timeout: ...
などと表示されている¶
センサーとのBLE接続確立に失敗している可能性があります
- しばらく待つ (再接続するため)
- データ収集プロセスを再起動する (チューターにご相談ください)
これらで対処可能です
Amazon ESのインスタンス作成と設定¶
本章のゴール: Amazon ES上のKibanaでテストデータのグラフが表示される
作業の位置づけ;

Amazon ESのクラスタを作成¶
Get started (もしくはダッシュボードの Create a new domain) からAmazon ESのインスタンス作成のウィザードを開始します
それぞれのステップでは、下記項目を変更するようにしてください (それ以外の項目はデフォルト値でOKです)
Elasticsearch domain name | jawsdays20160312handson |
> [Next] を押して次のステップへ | |
Instance type | t2.micro.elasticsearch |
Storage type | EBS |
> [Next] を押して次のステップへ | |
Set the domain access policy to | Allow open access to the domain |
> [Next] を押すと確認画面がでるので、確認後 [Confirm and create] で作成します |
警告
今回は時間の関係上 “Allow open access to the domain” (=すべてのアクセスを許可) としています。本番運用時にはアクセスコントロールを行うようにしてください
注釈
Amazon ESが使えるようになるまで10分程度かかるため、次章の作業(AWS LambdaのLambda function作成) を行うとよいでしょう
テストデータの投入と表示¶
Amazon ESが利用可能になったら、動作確認を行います
データの投入¶
注釈
- ここでは確認のために
curl
コマンドを使用します。準備願います (Windowsの方向け) date
コマンドが下記の通り使えない場合は2016-03-12T10:10:50+0900
というフォーマットの日付文字列に置き換えてください${YOUR_ES_ENDPOINT}
は、Amazon ESのダッシュボードで確認した Endpoint に置き換えてください
curl -X PUT ${YOUR_ES_ENDPOINT}/es-test/es0/1 -d "{\"deviceId\":\"es-test0\",\"field1\":1,\"@timestamp\":\"$(date +%Y-%m-%dT%H:%M:%S%z)\"}"
Windowsの方: 下記の通りダブルクオーテーションのエスケープを変更してください
curl -X PUT ${YOUR_ES_ENDPOINT}/es-test/es0/1 -d "{""deviceId"":""es-test0"",""field1"":1,""@timestamp"":""2016-03-12T10:10:50+0900""}"
コマンドの投入結果は下記のようになります
{"_index":"es-test","_type":"es0","_id":"1","_version":1,"created":true}
AWS LambdaのLambda function作成¶
本章のゴール: AWS Lambdaを経由して投入したテストデータがAmazon ES上のKibanaで表示される
作業の位置づけ;

IAMロールの作成¶
AWS Lambdaのfuctionを作成する前に、functionを実行するための権限ロールを作成します
ロールの作成¶
IAMコンソールのロール一覧から “新しいロールの作成” をクリックし、ウィザードを開始します
ウィザードの各項目は下記のようにしてください
ロール名 | jawsdays20160312_lambda_exec |
ロールタイプの選択 | AWS サービスロール => AWS Lambda を選択 |
ポリシーのアタッチ | <なにも選択せず> |
インラインポリシーの設定¶
- IAMコンソールのロール一覧から、先ほど作成した jawsdays20160312_lambda_exec ロールを選択
- “インラインポリシー” を選択 => “ここをクリックしてください” をクリック
- “カスタムポリシー” => “選択” をクリック
- 下記のとおりポリシー名とポリシードキュメントを設定し “ポリシーの検証” をした後 “ポリシーの適用” をクリック
ポリシー名 | jawsdays20160312_lambda_exec_adhoc_policy |
ポリシードキュメント
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}
以上でロールの作成は完了です
AWS Lambda function作成¶
Lambdaのコンソールから Get started Now もしくは Create a Lambda function から開始します
テンプレート選択画面では “Skip” を選択し、コード入力画面に遷移し、それぞれ下記の通り入力します
Name | jawsdays20160312_to_es |
Description | Convert from AWS IoT Data to Amazon ES |
Runtime | Python 2.7 |
Lambda function code | [Edit code inline] にチェックをつけ、後述のpythonコードを貼り付ける |
Role | jawsdays20160312_lambda_exec |
貼り付けるPythonコード¶
警告
貼付け時にコード内の YOUR_ES_ENDPOINT はAmazon ESのダッシュボードで得た Endpoint に書き換えるようにしてください
注釈
Amazon ESのインスタンス作成が完了してない場合は、とりあえず YOUR_ES_ENDPOINT のまま進め、その他の確認を終えた後に再度 Endpoint を指定して保存する方法があります
## example) es_endpoint = "search-jawsdays20160312handson-***.ap-northeast-1.es.amazonaws.com"
es_endpoint = "YOUR_ES_ENDPOINT"
es_index = "es-test"
es_type = "awsiot0"
# REF: https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-logging.html
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
http_req_headers = {
"pragma" : "no-cache",
"content-type": "application/json"
}
# REF: http://takatoshiono.hatenablog.com/entry/2014/12/18/192726
from datetime import timedelta, tzinfo
class JST(tzinfo):
def utcoffset(self, dt):
return timedelta(hours=9)
def dst(self, dt):
return timedelta(0)
def tzname(self, dt):
return "JST"
# Usage;
from datetime import datetime
#print datetime.now(tz=JST()).strftime("%Y-%m-%dT%H:%M:%S%z")
import urllib2, json
def lambda_handler(event, context):
logger.info('got event: {}'.format(event))
body = []
es_bulk_header = {"index": {}}
body.append(es_bulk_header)
payload = event["state"]["reported"] # When data of client pass through the AWS IoT, become {state: {reported: {PAYLOAD}}}
es_bulk_row = {
"deviceId" : payload["deviceId"],
"@timestamp": datetime.now(tz=JST()).strftime("%Y-%m-%dT%H:%M:%S%z"),
"payload" : payload
}
body.append(es_bulk_row)
post_body = "\n".join(map(json.dumps, body)) + "\n"
logger.debug('post_body: {}'.format(post_body))
# REF: http://takuya-1st.hatenablog.jp/entry/2014/08/23/023707
invoke_url = "http://" + "/".join([es_endpoint, es_index, es_type, "_bulk"])
logger.debug('invoke url: {}'.format(invoke_url))
req = urllib2.Request(invoke_url, post_body, http_req_headers)
res = urllib2.urlopen(req)
logger.info('res body :{}'.format(res.read()))
return "done"
テスト¶
テストデータを設定¶
[Actions] - [Configure test event] に下記JSONを入力して “Save” してください
{ "state":
{ "reported":
{ "deviceId": "lambda-test0",
"field1" : 2,
"field2" : "lambda_test"
}
}
}

注釈
{state:{reported: {PAYLOAD...}}}
はAWS IoTからの出力フォーマットに合わせたものです
テストを実行し、Amazon ESでデータを確認する¶
“Test” でLambda functionのテストを実行できます
“Execution result: succeeded” (グレー部分には “done”) の表示が出れば、Amazon ESのKibana上で今投入したテストデータが確認できます (“payload.キー: 値 という形になります”)

ここまで到達できればゴールです
AWS IoTの設定 へ進む
トラブルシュート¶
Amazon ESへの接続失敗¶
Amazon ESが立ち上がっていなかったり、Endpointが間違ってたりすると接続エラーが発生します
その場合のAWS Lambdaの実行ログは下記のようになります
<urlopen error [Errno -2] Name or service not known>: URLError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 51, in lambda_handler
res = urllib2.urlopen(req)
- Amazon ESが起動しているか確認してください
- Amazon ESの Endpoint が間違っていないか確認してください
Amazon ESにデータが出ない¶
- テストデータの形式確認してみてください
AWS IoTの設定¶
本章のゴール: AWS IoTでMQTT(AWS IoT上のテストサイト)による受信ができることを確認する
作業の位置づけ;

ポリシの作成¶
“モノ” が AWS IoTにアクセスする際の制限を設定することができます
今回はフルコントロールとします
作業¶
- AWS IoTのコンソールから “Create a resource” をクリックし “Create a policy” をクリック
- 下記を入力したら “Add statement” をクリックし “Create” をクリック
Name | jawsdays2016_awsiot_policy |
Action | iot:* |
Resource | テキストボックスに * を入力、Allowにチェック |
これでポリシが作成されました
※下図は “Add statement” 直前の画面です

“モノ” の作成¶
AWS IoT上で “モノ” として認識できるようにします
実物の “モノ” の状態を管理するための機能であるDevice shadowを使用する際に、特に必要となります
作業¶
- AWS IoTのコンソールから “Create a thing” をクリック
- 下記を入力したら “Create” をクリック
Name | jawsdays2016_awsiot_thing0 |
これで “モノ” が作成されました
証明書の作成, ポリシの割り当て, “モノ”の割り当て¶
“モノ” がAWS IoTにアクセスする際に使用する証明書(キーペア)を作成します
“モノ” に公開鍵を持たせてAWS IoTにアクセスすることで認証としています
証明書は有効(活動中)/無効(非活動)というステータスを持っており、証明書が有効だとしても非活動の場合はAWS IoTへのアクセスができないといった制御が可能です
また、この証明書にポリシと “モノ” を割り当てることで、その証明書を持っている “モノ” の制限をすることができるという仕組みです
すでに存在するキーペアから作成することも可能ですが、今回はAWS IoTに発行してもらいます
注釈
AWS IoT接続トラブルの原因の80%が、証明書に起因するものですので丁寧に実施してください
作業¶
- 証明書の作成
- AWS IoTのコンソールから “Create a certiicate” をクリック
- “1-CLick certificate create” をクリック <”INACTIVE” と書かれた証明書が作成されます>
- 画面上の “Download private key” と “Download certificate” をクリックし、それぞれ .pem.key ファイルと .pem.crt ファイルを取得する
警告
- private keyファイルはこのタイミングでのみダウンロード可能です。あとでダウンロードできないので、必ず取得してください
- certifiateファイルはAWS IoTの別の画面から、public keyファイルはprivate keyファイルから再作成・入手が可能ですが割愛します
- ポリシを証明書に割り当て
- 証明書のチェックボックスをクリック (ついていれば次へ)
- [Actions]の中から[Attach a policy]をクリック
- Policy name にポリシ名
jawsdays2016_awsiot_policy
を入力し “Attach” をクリック
- “モノ” を証明書に割り当て
- 証明書のチェックボックスをクリック (ついていれば次へ)
- [Actions]の中から[Attach a thing]をクリック
- Thing name にポリシ名
jawsdays2016_awsiot_thing0
を入力し “Attach” をクリック
- 証明書のアクティベート
- 証明書のチェックボックスをクリック (ついていれば次へ)
- [Actions]の中から[Activate]をクリック <証明書が “ACTIVE” に変化します>
※下図は 証明書にチェックを入れた後 “Actions” をクリックした直後の画面です

ルールの作成¶
AWS IoTでは、MQTTやRESTで送信されてきたデータに対して、どのようにアクションするか設定でき、これをルールと呼びます
作業¶
- AWS IoTのコンソールから “Create a rule” をクリック
- 下記を入力したら “Add action” をクリックし “Create” をクリック
Name | jawsdays2016_awsiot_rule0 |
Description | jawsdays2016_awsiot_rule0 |
Attribute | * |
Topic filter | jawsdays2016/sensor0 |
Condition | <なにも入力しません> |
Choosen an action | Lambda |
Function name | jawsdays20160312_to_es |
これでルールが作成されました
※下図は “Add action” 直前の画面です

AWS IoT上のMQTTクライアントツールを使用した確認¶
AWS IoTにはMQTTクライアントツールがあり、それを使って簡単に動作確認をすることができます
作業¶
- AWS IoTコンソールの右上 “MQTT Client” をクリック
- “Generate client ID” をクリック <Client IDに任意の文字列が入ります>
- “Connect” をクリック
- “Publish to topic” をクリック
- 下記を入力して “Publish” をクリック
Publish topic | jawsdays2016/sensor0 |
Payload | {"state":{"reported":{"deviceId":"awsiot-test0","field1":3,"field2":"from aws iot"}}} |

Kibana上に上記payloadのデータが入っていれば成功です

ここまで到達できればゴールです
BX1とAWS IoTの接続 へ進む
BX1とAWS IoTの接続¶
本章のゴール: センサーからのデータがAWS IoTとAWS Lambdaを通じてAmazon ES上のKibana上で確認できる
作業の位置づけ;

準備¶
AWS IoTから入手しておくもの¶
- 証明書(Certificate)ファイル <拡張子 .pem.crt>
- プライベートキー(PrivateKey)ファイル <拡張子 .pem.key>
- エンドポイント
エンドポイントの確認方法¶
最終的には “XXXXXXX.iot.REGION.amazonaws.com” というフォーマットの文字列を入手します
下記どちらかの方法で確認してください
- AWS CLIで
aws iot describe-endpoint
で確認 - AWS IoTコンソールの “Things” の REST API endpointから抜き出す

その他、入手しておくもの¶
警告
- 上記URLにはファイル名にスペースが含まれています。しかしBX1ではファイル名にスペース文字が使用できないため、処置をしておいてください (本ハンズオンではスペースを
_
に変更しています)
BX1設定¶
ファイルアップロード¶
AWS IoTの証明書ファイル・プライベートキーファイル・ルート証明書ファイルの3つをBX1にアップロードします
- WebUIから [システム] - [ファイル管理] を表示
- 本画面からファイルを3つ、それぞれアップロード
すべてアップロードされると、下記のような画面となります

収集設定 / AWS IoTに対する設定¶
- WebUIから [サービス] - [収集設定] を表示
- AWS IoT を 使用する (クリックで設定が展開します)
- 下記の通り設定します
インターバル | 3 |
送信先ホスト | <エンドポイントURL> |
root証明書 | /var/webui/upload_dir/VeriSign-Class_3-Public-Primary-Certification-Authority-G5.pem |
注釈
- 先のファイルアップロード画面でアップロードされたファイルは BX1内の
/var/webui/upload_dir/
にアップロードされます。それ以下のパスを指定することでファイルの読み込みが可能です

保存せず、引き続きページ下部へ移動します
収集設定 / センサーのデータ送信先にAWS IoTを加える¶
- dev_le_0000001 の 送信先設定 で AWSIOT にチェックを付けます (クリックで設定が展開します)
- 下記の通り設定します
トピック名 | jawsdays2016/sensor0 |
証明書(AWS IoT) | /var/webui/upload_dir/<アップロードした .pem.crtファイル> |
プライベートキー(AWS IoT) | /var/webui/upload_dir/<アップロードした .pem.keyファイル> |

保存後、即座にAWS IoTへの送信が始まります。Amazon ESのKibanaでデータ受信ができているか確認してください

データの変化を楽しむ¶
加速度をつかってこんなグラフを作ることできます
※Kibanaの使い方は本ハンズオンの範疇を超えてしまうため、興味のある方はチューターにお声がけください

センサーのデータ取得間隔が1秒毎となっているため、加速度の数値を変化させたい場合は若干振り続ける等するようにしてください
くれぐれも降ってる最中に投げ出す事のないように、ご注意願います!

トラブルシュート¶
以下を確認してみてください
- センサーからのデータを受信できているか (pd-handler-stdout.logを確認してください)
- 3G通信ができているか (pingを試してみてください)
- AWS IoTへ接続・送信できているか (CloudWatchを確認してください)
- AWS IoTのエンドポイントはあっているか
- トピック名はあっているか
- 証明書があっているか
- 証明書はACTIVEになっているか
- 有効なポリシがアタッチされているか
- ルールは正しくLambdaを呼び出すようになっているか
- AWS Lambdaを呼び出せているか (CloudWatchを確認してください)
- 有効なロールがセットされているか
- Elasticsearch Serviceのエンドポイントはあっているか
BX1からAWS IoTへの送信状況の確認¶
WebUIから [サービス] - [収集ログ] にて、動作確認が可能です
ログ選択はそれぞれ下記のとおりです
pd-handler-stdout.log | センサー <-> BX1 間の送受信状況 |
pd-emitter.log | BX1 <-> 送信先(localやAWS IoT等) 間の送受信状況 |
あとかたづけ&自習室¶
AWSリソース¶
本ハンズオンで作成したAWSリソース等は継続的に費用がかかるものがあるため、不要ならば削除するようにしてください
- AWS IoT
- ルール
- 証明書
- アタッチされている “モノ” とポリシをデタッチ
- 証明書のDeactivate
- “モノ”
- ポリシ
- AWS Lambda function
- IAMロール
- Amazon ESインスタンス (課金されるので注意)
自習室¶
センサーデータフォーマット¶
センサーデータは、BX1を通過すると下記のようなJSONデータとなります このフォーマットをAWS IoT内のRule Engineや、Lambdaで処理することが可能です (jqを使って整形済み。コメントは付与されません)
富士通コンポーネント社製 温度・加速度センサーデバイス “FWM8BLZ02”¶
{
"deviceId": "e73a40839d8a", // BX1の設定画面で設定したデバイスID (BX1で付与)
"time": "2016-03-09T18:15:53.764+0900", // 計測日時 (BX1で付与)
"temperature": 27.22, // 温度 ℃
"accelX": 0.092, // X方向 加速度 G
"accelY": -0.952, // Y方向 加速度 G
"accelZ": -0.113 // Z方向 加速度 G
}
また、AWS IoTのDevice shadowで取得すると state
等、AWS IoTの属性が付与されます
{
"state": {
"reported": {
"deviceId": "e73a40839d8a",
"time": "2016-03-09T18:15:53.764+0900",
"temperature": 27.22,
"accelX": 0.092,
"accelY": -0.952,
"accelZ": -0.113
}
}
}
Texas Instruments社製 多機能/開発用センサー sensorTag CC2541¶
{
"deviceId": "5c313ec027e1", // BX1の設定画面で設定したデバイスID (BX1で付与)
"humidity": 40.7, // 湿度 %
"temperature": 28.6, // 温度 ℃ (湿度センサー内)
"objectTemp": 23.8, // 物体温度 ℃
"ambientTemp": 28.4, // 周辺温度 ℃
"gyroX": -1.4, // ジャイロ(X軸) deg/s <角速度>
"gyroY": 4, // ジャイロ(Y軸) deg/s
"gyroZ": 0.2, // ジャイロ(Z軸) deg/s
"pressure": 1015.6, // 気圧 hPa
"accelX": 0.1, // 加速度(X軸) G
"accelY": 0.3, // 加速度(Y軸) G
"accelZ": 3.8, // 加速度(Z軸) G
"magX": -53.9, // 地磁気(X軸) μT <テスラ>
"magY": -5.2, // 地磁気(Y軸) μT
"magZ": 102.7, // 地磁気(Z軸) μT
"time": "2015-11-19T10:29:20.529+0900" // 計測日時(BX1で付与)
}
また、AWS IoTのDevice shadowで取得すると state
等、AWS IoTの属性が付与されます
{
"state": {
"reported": {
"deviceId": "5c313ec027e1",
"humidity": 40.7,
"temperature": 28.6,
"objectTemp": 23.8,
"ambientTemp": 28.4,
"gyroX": -1.4,
"gyroY": 4,
"gyroZ": 0.2,
"pressure": 1015.6,
"accelX": 0.1,
"accelY": 0.3,
"accelZ": 3.8,
"magX": -53.9,
"magY": -5.2,
"magZ": 102.7,
"time": "2015-11-19T10:29:20.529+0900"
}
}
}
BX1へシリアルコンソールでログインする¶
BX1 は給電用USB ケーブルが、シリアルコンソールを兼任しています
FTDIのシリアルポートドライバがインストール済みのWindows / Mac OS Xや、Linuxならば追加ドライバ不要でアクセス可能です
ID | root |
Password | 0BSI0T (ゼロ ビー エス アイ ゼロ ティー) |
e.g.) screen コマンドによるアクセス
screen /dev/ttyUSB0 115200
全体構成 へ進む
時間配分¶
- [30m] BX1のWi-Fi AP設定とSORACOM Air(3Gネットワーク)設定
- [15m] センサーとBX1の接続
- [10m] Amazon ESのインスタンス作成と設定
- [20m] AWS LambdaのLambda function作成
- [30m] AWS IoTの設定
- [30m] BX1とAWS IoTの接続
- [15m] あとかたづけ